package syg._04_activiti_task;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.junit.Test;

import java.util.List;

/**
 * 查询任务
 */
public class _01_TodoTask {

    /**
     * 查询个人待执行的任务
     *
     * SELECT DISTINCT res.*
     * from act_ru_task res
     * INNER JOIN act_re_procdef d
     * on res.proc_def_id_ = d.id_
     * WHERE res.assignee_ = '张经理' and d.key_ = 'myEvection'
     *
     * 完成个人任务时,表act_hi_taskinst中的结束时间有值
     */
    @Test
    public void test1() {
        // 1,创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2,获取TaskService(因为我们要获取待执行的任务,任务相关的service是TaskService)
        TaskService taskService = processEngine.getTaskService();
        // 3,根据流程key 和 任务负责人 查询任务(一个人名下可能有多个待办的任务)
        String taskAssignee = "张员工";
        List<Task> taskList = taskService.createTaskQuery()
                .processDefinitionKey("myEvection")
                .taskAssignee(taskAssignee)
                .list();
        // 4,输出任务
        for (Task task : taskList) {
            System.out.println("任务负责人=" + task.getAssignee());
            System.out.println("任务id(这个id是表中的id)=" + task.getId());
            System.out.println("任务名称=" + task.getName());
            System.out.println("流程定义id(act_re_procdef中的id字段)=" + task.getProcessDefinitionId());
            System.out.println("流程实例id=" + task.getProcessInstanceId());
            System.out.println("任务定义key=" + task.getTaskDefinitionKey());
            System.out.println(task.getProcessVariables());
            System.out.println("====================我是分隔线====================");
        }
    }
}
